package com.zjsru.plan2023.oneday.oneDay202301;

/**
 * @Author: CookLee
 * @Date: 2023/1/26
 * 具有给定数值的最小字符串
 * 例如，字符串 "abe" 的数值等于 1 + 2 + 5 = 8 。
 * 给你两个整数 n 和 k 。返回 长度 等于 n 且 数值 等于 k 的 字典序最小 的字符串。
 *
 * 输入：n = 3, k = 27
 * 输出："aay"
 * 解释：字符串的数值为 1 + 1 + 25 = 27，它是数值满足要求且长度等于 3 字典序最小的字符串。
 *
 * 输入：n = 5, k = 73
 * 输出："aaszz"
 *
 */
public class GetSmallestString {
    
    /**
     * 得到最小字符串:贪心
     * 从字符串左边起始位置开始构造，每次选择一个满足要求的最小字母，即可得到答案。
     *
     * @param n n
     * @param k k
     * @return {@link String}
     */
    public String getSmallestString(int n, int k) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            int max = Math.max(1, k - (n - i) * 26);
            k -= max;
            //获取的max最低值为1，所以当取最小的字母时需要 -1
            sb.append((char) (max + 'a' - 1));
        }
        return sb.toString();
    }
    
    public static void main(String[] args) {
        GetSmallestString getSmallestString = new GetSmallestString();
        int n = 3;
        int k = 27;
        System.out.println(getSmallestString.getSmallestString(n, k));
    }
}
